package com.tedu.api.list;

import org.junit.Test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * Set接口是Collection的子接口
 * Set接口存储数据，特点：无序，无下标，元素不可以重复，
 *    子实现类：存null，不可以存null
 * 常用方法：Set接口的方法继承与Collection接口
 *         add（）、remove（）、contains（）、size（）、clear（）
 * 迭代器：Iterator进行遍历集合
 * 具体实现类：
 * 1.hasNext：由哈希算法实现保存数据集合
 * 特点：不保证元素顺序，不允许元素重复，可以存null值
 * SET的方法Hashset方法一致
 * 2.LinkedHasSet【偶尔用】：可以存null，不允许元素重复，保证元素顺序
 * 3.TreeSet【基本不用】：
 *
 */
public class SetAPI {
   @Test
    public void testSet(){
       //创建Set集合---多态方式
       Set<String> set=new HashSet<>();
       //add()父类set方法|子类HashSet add（）--子类重写的方法
       set.add(new String("蒸鹿尾"));
       set.add(new String("烧花鸭"));
       set.add(new String("烧雏鸡"));
       set.add(new String("烧子鹅"));
       System.out.println("set集合打印："+set);
       //remove方法--重写Collection
       set.remove("烧雏鸡");  //返回值：boolean
       System.out.println("删除Set集合元素："+set);
       boolean b=set.contains("烧雏鸡");
       System.out.println("判断元素是否存在Set集合中："+b);
       System.out.println("Set集合元素个数："+set.size());
       //set.clear();
       //System.out.println("是否清空set集合："+set);
       //使用Iterator遍历Set集合数据
       //1.通过set集合调用Iterator（）返回：Iterator实例【迭代器对象】
      Iterator<String> it= set.iterator();
       //2.遵循迭代器使用规则：问、取、删---删除null值
       while (it.hasNext()){//问：集合是否有数据
          String str=it.next();//取:获取元素
          if ("null".equals(str)){
             it.remove();//删
          }
       }
       //3.迭代器中打印元素：数据
   }
}
